#ifndef __COLLISIONSTRATEGY_H
#define __COLLISIONSTRATEGY_H

#include "sprite.h"

class CollisionStrategy {
	public:
		virtual bool execute(Sprite&, Sprite&) const = 0;
		virtual void draw() const = 0;
		virtual ~CollisionStrategy() {}
};

class RectangularCollisionStrategy : public CollisionStrategy {
	public:
		RectangularCollisionStrategy() {}
		virtual bool execute(Sprite&, Sprite&) const;
		virtual void draw() const;
};

class AABBCollisionStrategy : public CollisionStrategy {
	public:
		AABBCollisionStrategy() {}
		virtual bool execute(Sprite&, Sprite&) const;
		virtual void draw() const;
};

class MidPointCollisionStrategy : public CollisionStrategy {
	public:
		MidPointCollisionStrategy() {}
		virtual bool execute(Sprite&, Sprite&) const;
		virtual void draw() const;
		float distance(float, float, float, float) const;
};

class PerPixelCollisionStrategy : public CollisionStrategy {
	public:
		PerPixelCollisionStrategy() {}
		virtual bool execute(Sprite&, Sprite&) const;
		virtual void draw() const;
};

#endif // !__COLLISIONSTRATEGY_H
